/**
 * 页面滚动加载动作
 * @param {import('playwright').Page} page - Playwright 页面对象
 * @param {number} pageSize - 当前页码
 * @param {number} [timeout=2000] - 等待时间（毫秒），默认2000ms
 */
async function scrollAction(page, pageSize, timeout = 2000) {
    // 继续向下滚动一段距离
    await page.evaluate('window.scrollBy(0, 1000)');

    console.log(`执行加载${(pageSize + 1)}页`);

    // 等待指定时间
    await page.waitForTimeout(timeout);
}

/**
 * 通过点击下一页按钮加载更多内容
 * @param {import('playwright').Page} page - Playwright 页面对象
 * @param {string} selector - 下一页按钮的选择器
 * @param {number} pageSize - 当前页码
 * @param {number} [timeout=2000] - 等待时间（毫秒），默认2000ms
 */
async function clickNextAction(page, selector, pageSize, timeout = 2000) {
    try {
        // 点击下一页按钮
        await page.click(selector);
        console.log(`点击加载第${(pageSize + 1)}页`);

        // 等待指定时间
        await page.waitForTimeout(timeout);
    } catch (error) {
        console.error(`点击下一页按钮失败: ${error.message}`);
        throw error;
    }
}

/**
 * 通过修改URL参数加载下一页
 * @param {import('playwright').Page} page - Playwright 页面对象
 * @param {number} pageSize - 当前页码
 * @param {Object} options - 配置选项
 * @param {string} [options.paramKey='page'] - 页码参数的键名
 * @param {string} [options.baseUrl] - 基础URL，不包含页码参数
 * @param {number} [options.timeout=2000] - 等待时间（毫秒），默认2000ms
 */
async function pageParamAction(page, pageSize, options = {}) {
    const {
        paramKey = 'page',
        baseUrl = page.url().split('?')[0],
        timeout = 2000
    } = options;

    try {
        // 构建新的URL
        const url = new URL(baseUrl);
        url.searchParams.set(paramKey, (pageSize + 1).toString());

        // 导航到新页面
        await page.goto(url.toString());
        console.log(`参数加载第${(pageSize + 1)}页`);

        // 等待指定时间
        await page.waitForTimeout(timeout);
    } catch (error) {
        console.error(`页面参数加载失败: ${error.message}`);
        throw error;
    }
}

module.exports = {
    scrollAction,
    clickNextAction,
    pageParamAction
};